#ifndef GAMEABILITY_H
#define GAMEABILITY_H

class GameAbility
{
public:
	GameAbility();
	GameAbility(const GameAbility& rhs);
	virtual ~GameAbility();

	bool Activate(GameAbility* ability);
	virtual GameAbility* Clone() const = 0;

protected:
	virtual unsigned int Id() = 0;
	virtual void Activate() = 0;

	void InitializeId(unsigned int *newId);
	
private:
	static unsigned int uniqueId;
};

#endif //GAMEABILITY_H
